﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CarsClassLibrary;
using Logic;

namespace WinForm
{
    public partial class Form1 : Form
    {
        int count = 1;
        List<AbstractCar> Park = new List<AbstractCar>();
        Creator creator;
        public Form1()
        {
            InitializeComponent();
            ProgramLogic programLogic = new ProgramLogic();
            Park = programLogic.CreatePark();
            ListOut();
        }

        public void ListOut()
        {
            listBox.Items.Clear();

            if (Park.Count != 0)
            {
                listBox.Items.Add("Список");
                foreach (AbstractCar auto in Park)
                {
                    listBox.Items.Add(count + ") " + (auto.brand));
                    count++;
                }
                count = 1;
            }
            else
                listBox.Items.Add("Список пуст.");
        }

        private void Add_button_Click(object sender, EventArgs e)
        {
            try
            {
                switch (comboBox1.SelectedItem.ToString())
                {
                    case "Chrysler Pacifica Touring":
                        creator = new ChryslerPacificaTouringCreator();
                        ChryslerPacificaTouring CPTcar = new ChryslerPacificaTouring();
                        CPTcar.price = Convert.ToInt32(textBox2.Text);
                        if (CPTcar.price >= 0)
                        {
                            CPTcar.brand = "Автомобиль Chrysler Pacifica Touring стоимостью " + CPTcar.price + " тысяч рублей";
                            Park.Add(CPTcar);
                            listBox.Items.Clear();
                            ListOut();
                            Message_label.Text = "Вы добавили в список новый Chrysler Pacifica Touring";
                        }
                        else
                        {
                            Message_label.Text = "Стоимость не может быть отрицательной.";
                        }
                        break;
                    case "Jeep Commander":
                        creator = new JeepCommanderCreator();
                        JeepCommander JeepCom = new JeepCommander();
                        JeepCom.price = Convert.ToInt32(textBox2.Text);
                        if (JeepCom.price >= 0)
                        {
                            JeepCom.brand = "Автомобиль Jeep Commander стоимостью " + JeepCom.price + " тысяч рублей";
                            Park.Add(JeepCom);
                            listBox.Items.Clear();
                            ListOut();
                            Message_label.Text = "Вы добавили в список новый Jeep Commander";
                        }
                        else
                        {
                            Message_label.Text = "Стоимость не может быть отрицательной.";
                        }
                        break;
                    case "Lamborghini Gallardo":
                        creator = new LamborghiniGallardoCreator();
                        LamborghiniGallardo Lamborg = new LamborghiniGallardo();
                        Lamborg.price = Convert.ToInt32(textBox2.Text);
                        if (Lamborg.price >= 0)
                        {
                            Lamborg.brand = "Автомобиль Lamborghini Gallardo стоимостью " + Lamborg.price + " тысяч рублей";
                            Park.Add(Lamborg);
                            listBox.Items.Clear();
                            ListOut();
                            Message_label.Text = "Вы добавили в список новый Lamborghini Gallardo";
                        }
                        else
                        {
                            Message_label.Text = "Стоимость не может быть отрицательной.";
                        }
                        break;
                    case "Maserati Gran Turismo":
                        creator = new MaseratiGranTurismoCreator();
                        MaseratiGranTurismo Maserati = new MaseratiGranTurismo();
                        Maserati.price = Convert.ToInt32(textBox2.Text);
                        if (Maserati.price >= 0)
                        {
                            Maserati.brand = "Автомобиль Maserati Gran Turismo стоимостью " + Maserati.price + " тысяч рублей";
                            Park.Add(Maserati);
                            listBox.Items.Clear();
                            ListOut();
                            Message_label.Text = "Вы добавили в список новый Maserati Gran Turismo";
                        }
                        else
                        {
                            Message_label.Text = "Стоимость не может быть отрицательной.";
                        }
                        break;
                    case "Opel Meriva":
                        creator = new OpelMerivaCreator();
                        OpelMeriva OpelM = new OpelMeriva();
                        OpelM.price = Convert.ToInt32(textBox2.Text);
                        if (OpelM.price >= 0)
                        {
                            OpelM.brand = "Автомобиль Opel Meriva стоимостью " + OpelM.price + " тысяч рублей";
                            Park.Add(OpelM);
                            Message_label.Text = "Вы добавили в список новый Opel Meriva";
                            listBox.Items.Clear();
                            ListOut();
                        }
                        else 
                        {
                            Message_label.Text = "Стоимость не может быть отрицательной.";
                        }
                        break;
                    default:
                        break;
                }
            }
            catch (Exception)
            {
                Message_label.Text = "Ошибка! ";
            }
        }

        private void Delete_button_Click(object sender, EventArgs e)
        {
            try
            {
                Park.RemoveAt(Convert.ToInt32(textBox1.Text) - 1);
                ListOut();
                Message_label.Text = "Вы удалили элемент, теперь список выглядит так.";
            }
            catch (Exception)
            {
                Message_label.Text = "Введите корректное значение. ";
            }
        }

        private void DeleteAll_button_Click(object sender, EventArgs e)
        {
            if (Park.Count > 0)
            {
                Park.Clear();
                ListOut();
                Message_label.Text = "Вы удалили все элементы списка.";
            }
            else
                Message_label.Text = "Список итак пуст.";
        }

        private void Out_button_Click(object sender, EventArgs e)
        {
            if (Park.Count > 0)
            {
                ListOut();
                Message_label.Text = "Список выведен.";
            }
            else
                Message_label.Text = "Список пуст.";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            listBox.Items.Clear();
            listBox.Items.Add("Общая стоимость автопарка: ");
            Counter counter = new Counter();
            listBox.Items.Add(counter.Count(Park) + " тысяч рублей.");
            Message_label.Text = "Вы посчитали стоимость автопарка.";
        }
    }
}
